// Copyright (c) 2025, 大连理工大学 (Dalian University of Technology)
//
// Licensed under the Mulan PSL v2.
// You can use this file according to the terms and conditions of the Mulan PSL v2.
// You may obtain a copy of the License at
//
//     http://license.coscl.org.cn/MulanPSL2
//
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. SEE THE MULAN PSL v2
// FOR MORE DETAILS.

#include "DBManager/Repository/HDF5/Input/Design/DSCREENRepository.h"

#include "DBManager/Repository/HDF5/Base/HDF5RepositoryMacro.h"
HDF5_REG_NO_SORT_REPOSITORY (DSCREENRepository)

using namespace SG::DBManager::HDF5;

DSCREENRepository::DSCREENRepository (HDF5Database& database) : RepositoryBase (database)
{}

void DSCREENRepository::InitialDatasetInfo ()
{
    RegisterTableInfo<SG::DataStructure::FEM::DSCREENData> ("/SG/INPUT/DESIGN/DSCREEN", MainDataset);
}

/// @brief 写入配置
/// @param entity
SG::DataStructure::Common::Status DSCREENRepository::Set (const SG::DataStructure::FEM::DSCREENData& entity)
{
    CoverLocalData (this->GetDatasetInfo (MainDataset), entity);

    return SG::DataStructure::Common::Status::STATUS_Success;
}

/// @brief 获取配置
/// @return
SG::DataStructure::FEM::DSCREENData DSCREENRepository::Get ()
{
    SG::DataStructure::FEM::DSCREENData entity;

    // 获取数据集的路径和数据集对象
    HighFive::DataSet dataset = this->GetDataset (MainDataset);
    // 写出数据
    dataset.select ({ 0 }, { 1 }).read (entity);

    return entity;
}